package com.sy.simpleegg.ui.dialog

import android.annotation.SuppressLint
import android.content.Context
import android.content.DialogInterface
import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction
import com.sy.simpleegg.R
import com.sy.simpleegg.databinding.DialogCouponBinding
import com.sy.simpleegg.ext.countDown
import com.sy.simpleegg.ext.logFile
import com.sy.simpleegg.ext.onClick
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.cancel


class CouponDialog(
    private val title: String?,
    private val tips: String?,
    private val couponType: Int,
    private val countDownTime: Int,
    private val showCode: Boolean,
    private var couponDialogListener: CouponDialogListener,
): DialogFragment() {

    private lateinit var binding: DialogCouponBinding

    var timeDownScope: CoroutineScope? = null

    private var verificationData = ""

    override fun onStart() {
        super.onStart()
//        dialog!!.window!!.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)

        val width = resources.getDimensionPixelSize(R.dimen.dialog_payment_width)
        val height = resources.getDimensionPixelSize(R.dimen.dialog_payment_height)
//        val marginBottom = resources.getDimensionPixelSize(R.dimen.dialog_good_detail_margin_bottom)

//        dialog!!.window!!.setLayout(width, height + marginBottom)
        dialog!!.window!!.setLayout(width, height)
        dialog!!.window!!.setGravity(Gravity.CENTER)
        dialog!!.setCanceledOnTouchOutside(false)
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?,
    ): View? {
        binding = DialogCouponBinding.inflate(inflater, container, false)
//        setStyle(STYLE_NO_TITLE, R.style.MyDialog)
//        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT))
//        dialog!!.window!!.setGravity(Gravity.BOTTOM)
        dialog!!.window!!.setBackgroundDrawableResource(R.color.transparent)
//        var wlp = dialog!!.window!!.attributes
//        wlp.gravity = Gravity.BOTTOM
//        wlp.width = WindowManager.LayoutParams.MATCH_PARENT
//        wlp.height = WindowManager.LayoutParams.MATCH_PARENT
//        dialog!!.window!!.attributes = wlp

        return binding.root
    }

    @SuppressLint("SetTextI18n")
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        try {
            binding.tvQrCodeTitle.text = title
            binding.tvScanTips.text = tips
            binding.layoutClose.tvDismiss.text = "${countDownTime}S"

            binding.layoutClose.tvClose.onClick {
                couponDialogListener.back()
                dismissAllowingStateLoss()
            }
            binding.btnDismiss.onClick {
                couponDialogListener.back()
                dismissAllowingStateLoss()
            }
            binding.btnConfirm.onClick {
                val data = getCouponCode()
                if (data.isEmpty()){
                    return@onClick
                }
                couponDialogListener.verification(couponType, getCouponCode())
                dismissAllowingStateLoss()
            }

            binding.btnConfirm.visibility = if (showCode) View.VISIBLE else View.GONE
            binding.etCouponCode.visibility = if (showCode) View.VISIBLE else View.GONE

        }catch (e: Exception){
            e.printStackTrace()
            logFile("初始化页面异常：${e.message}")
        }
    }

    private fun getCouponCode():String{
        return binding.etCouponCode.text.toString()
    }

    override fun showNow(manager: FragmentManager, tag: String?) {
        super.showNow(manager, tag)
        startCountDown(countDownTime)
    }

    override fun show(manager: FragmentManager, tag: String?) {
        super.show(manager, tag)
        startCountDown(countDownTime)
    }

    override fun show(transaction: FragmentTransaction, tag: String?): Int {
        val result = super.show(transaction, tag)
        startCountDown(countDownTime)
        return result
    }

    override fun onDismiss(dialog: DialogInterface) {
        super.onDismiss(dialog)
        couponDialogListener.dismiss()
    }

    fun setCode(scanData: String){
        verificationData = scanData
    }

    @SuppressLint("SetTextI18n")
    private fun startCountDown(timeout: Int){
//        var timeDownScope: CoroutineScope? = null
        timeDownScope?.cancel()

        countDown(
            time = countDownTime,
            start = {
                timeDownScope = it
                logFile("开始倒计时")
            },
            end = {
                logFile("结束倒计时")
            },
            next = {
                binding.layoutClose.tvDismiss.text = "${it}S"
                if (it == 0){
                    dismissAllowingStateLoss()
                }
            })
    }

    interface CouponDialogListener{
        fun dismiss()

        fun back()

        fun verification(type: Int, couponData: String)
    }

    fun dpToPx(context: Context, dp: Int): Int {
        val density = context.resources.displayMetrics.density
        return Math.round(dp * density)
    }
}